home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / varie / uae-0_64.lha / uae-0.6.4 / src / keybuf.c < prev    next >
C/C++ Source or Header  |  1996-08-14  |  2KB  |  85 lines

  1.  /* 
  2.   * UAE - The Un*x Amiga Emulator
  3.   * 
  4.   * Keyboard buffer. Not really needed for X, but for SVGAlib and possibly
  5.   * Mac and DOS ports.
  6.   * 
  7.   * (c) 1995 Bernd Schmidt
  8.   */
  9.  
  10. #include "sysconfig.h"
  11. #include "sysdeps.h"
  12. #include <assert.h>
  13.  
  14. #include "config.h"
  15. #include "options.h"
  16. #include "keybuf.h"
  17. #include "keyboard.h"
  18. #include "os.h"
  19.  
  20. /* This is cryptic, but hey, it works! */
  21. int fakestate[5] = { 0, 0, 0, 0, 0 };
  22.  
  23. void getjoystate(UWORD *st, int *button)
  24. {
  25.     if (fake_joystick) {
  26.     int top = fakestate[0];
  27.     int bot = fakestate[3];
  28.     if (fakestate[1]) top = !top;
  29.     if (fakestate[2]) bot = !bot;
  30.     *st = bot | (fakestate[2] << 1) | (top << 8) | (fakestate[1] << 9);
  31.     *button = fakestate[4];
  32.     } else
  33.     read_joystick(st, button);
  34. }
  35.  
  36. /* Not static so the DOS code can mess with them */
  37. int kpb_first, kpb_last;
  38.  
  39. static int keybuf[256];
  40.  
  41. int keys_available (void)
  42. {
  43.     return kpb_first != kpb_last;
  44. }
  45.  
  46. int get_next_key (void)
  47. {
  48.     int key;
  49.     
  50.     assert (kpb_first != kpb_last);
  51.     
  52.     key = keybuf[kpb_last];
  53.     if (++kpb_last == 256) 
  54.     kpb_last = 0;
  55.     return key;    
  56. }
  57.  
  58. void record_key (int kc)
  59. {
  60.     int kpb_next = kpb_first + 1;
  61.  
  62.     if (kpb_next == 256)
  63.     kpb_next = 0;
  64.     if (kpb_next == kpb_last) {
  65.     fprintf(stderr, "Keyboard buffer overrun. Congratulations.\n");
  66.     return;
  67.     }
  68.     if (fake_joystick) {
  69.     switch (kc >> 1) {
  70.      case AK_NP8: fakestate[0] = !(kc & 1); return;
  71.      case AK_NP4: fakestate[1] = !(kc & 1); return;
  72.      case AK_NP6: fakestate[2] = !(kc & 1); return;
  73.      case AK_NP2: fakestate[3] = !(kc & 1); return;
  74.      case AK_NP0: case AK_NP5: fakestate[4] = !(kc & 1); return;
  75.     }
  76.     }
  77.     keybuf[kpb_first] = kc;
  78.     kpb_first = kpb_next;
  79. }
  80.  
  81. void keybuf_init (void)
  82. {
  83.     kpb_first = kpb_last = 0;
  84. }
  85.